package cn.dsp.admin.controller;

import cn.dsp.admin.service.ex.*;
import cn.dsp.admin.utils.JsonResult;
import org.springframework.web.bind.annotation.ExceptionHandler;

import javax.servlet.http.HttpSession;

/**
 * 控制器类的基类
 */
public class BaseController {

    /**
     * 响应成功的标识码
     */
    public static final int SUCCESS = 2000;

    /**
     * 从Session中获取当前登录的用户的id
     * @param session Session对象
     * @return 当前登录的用户的id
     */
    protected Integer getAdminIdFromSession(HttpSession session) {
        return Integer.valueOf(session.getAttribute("adminId").toString());
    }

    /**
     * 从Session中获取当前登录的用户名
     * @param session Session对象
     * @return 当前登录的用户名
     */
    protected String getAdminNameFromSession(HttpSession session) {
        return session.getAttribute("adminName").toString();
    }

    protected Integer getStoreIdFromSession(HttpSession session){
        return Integer.valueOf(session.getAttribute("storeId").toString());
    }

    
    @ExceptionHandler({ServiceException.class})

    public JsonResult<Void> handleException(Throwable e) {
        JsonResult<Void> jsonResult = new JsonResult<>(e);

        if (e instanceof UsernameConflictException) {
            // 4000-用户名冲突异常，例如：注册时用户名已经被占用
            jsonResult.setState(4000);
        } else if (e instanceof UserNotFoundException) {
            // 4001-用户数据不存在
            jsonResult.setState(4001);
        } else if (e instanceof PasswordNotMatchException) {
            // 4002-验证密码失败
            jsonResult.setState(4002);
        }  else if (e instanceof AccessDeniedException) {
            // 4005-拒绝访问，例如：尝试访问他人的数据
            jsonResult.setState(4005);
        }  else if (e instanceof RoleNotFoundException){
            //4006-角色不存在
            jsonResult.setState(4006);
        }else if (e instanceof InsertException) {
            // 5000-插入数据异常
            jsonResult.setState(5000);
        } else if (e instanceof UpdateException) {
            // 5001-更新数据异常
            jsonResult.setState(5001);
        } else if (e instanceof DeleteException) {
            // 5002-删除数据异常
            jsonResult.setState(5002);
        }

        return jsonResult;
    }

}